package com.mocha.common.core;

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * opcode :   0 普通提示， 1，弹到大厅， 2， 弹到登录， 3，重新读取服务器连接
 */
public enum ResponseCode {

    /**  系统  */
    Success(200, 0, "SUCCESS"),            // "成功"),
    SysException(500, 0, "系统开小差了"),      // 系统异常， "系统开小差了"), 业务方面的错误! 这种错误需要不断调试尽量将到最低

    GatewayDowntime(555, 3, "不可抗555"),   // 网关挂掉 1，重新获取网关地址, 2，重新进入大厅；
    GameServerDowntime(560, 1, "不可抗560"), // 子游戏TMS 需要客户端 返回大厅；
    LobbyServerDowntime(570, 3, "不可抗570"), // 大厅服务器挂了; 整个服务不能使用了; 只有网关可以用 ； 返回登录界面

    InactiveChannel(616, 0, "InactiveChannel"),      //该消息号用于网关断线; 不一定登录失效
    LoginUn(666, 2, "您的登录信息已失效,请重新登录"),  // 您的登录信息已失效, 请重新登录!    账号出现异常,请重新登录！ 客户退回登录界面
    EnterRoomUn(777, 1, "进入子游戏异常，返回大厅"),
    InMaintenance(778, 2, "系统维护中"),
    OnlineMax(999, 0, "玩家达到上限,稍后重试"),
    //公共业务 消息
    ParamInvalid(1000, 0, "参数无效"), //, 0, "请求参数无效，请重新输入" 模糊提示, 不用精确提示，以免安全漏洞


    LoginFailed(1001, 2, "登录信息错误"),//游客登录：gameId跟mac不匹配
    LoginTimes(1004, 2, "账号已达到最大登录个数"),
    UserState(1005, 0, "用户无效"),

    NotPermission(1002, 0, "未找到相关资源"),
    NotHandler(1003, 0, "未找到相关处理器"),

    //----------------------,
    ExcelFieldNotSet(2000, 0, "数据库未配置excel字段信息!"),
    ExcelImportNotHandler(2001, 0, "未发现对应导入Handler!"),
    ExcelExportNotHandler(2002, 0, "未发现对应导出Handler!"),
    ExcelNotCode(2003, 0, "请传入导入导出编码ExcelCode!"),
    ExcelNotData(2004, 0, "未查询到相关数据!"),
    ExcelFileExteError(2005, 0, "请选择Excel格式文件!"),
    MinioNotMainInfo(2006, 0, "未发现Minio关键信息[bucket,object]")

    ;



    private final int code;
    private final int opcode;
    private final String msg;

    ResponseCode(int code, int opcode, String msg) {
        this.code = code;
        this.opcode = opcode;
        this.msg = msg;
    }
    private final static Map<Integer, ResponseCode> codeMap = Arrays.stream(ResponseCode.values()).collect(Collectors.toMap(ResponseCode::code, code -> code));
    public int code() {
        return this.code;
    }

    public int opcode() {
        return this.opcode;
    }

    public String msg(){
        return this.msg;
    }

    public static ResponseCode getResponseCode(Integer code){
        return codeMap.get(code);
    }

    public static Map<Integer, ResponseCode> getCodeMap() {
        return codeMap;
    }

}
